<!doctype html>
<html lang="zh_cn" itemscope itemtype="http://schema.org/Person">
<head>
            <meta charset="utf-8">
        <!-- Site Meta Data -->
        <title>[原创]正则表达式和通配符</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="技术博客,涉及Java/PHP/Python/Javascript等,聊聊程序,聊聊生活,聊聊事实,聊聊育儿">
        <meta name="keywords" content="编码经验,技术分享,生活积累,实事评说">
        <meta name="author" content="布丁缘">

        <link rel="shortcut icon" href="">

        <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,600,700' rel='stylesheet' type='text/css'>
        <!-- Style Meta Data -->
        <link rel="stylesheet" href="https://www.ddkiss.com/theme/css/style.css" type="text/css"/>
        <link rel="stylesheet" href="https://www.ddkiss.com/theme/css/pygments.css" type="text/css"/>

        <!-- Feed Meta Data -->
            <link href="https://www.ddkiss.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate"
                  title="一个程序员的简单生活 ATOM Feed"/>


    <meta name="keywords" content="">
    <link rel="stylesheet" href="//dn-coding-net-public-file.qbox.me/Coding-Comments/v0.1.0/default.css">
</head>

<body>
<!-- Sidebar -->
<aside>
    <center><h1><a href="/" style="color:#fff"><img id="avatar" src="/images/avatar.jpg"></a></h1></center>
        <p>一个程序员的简单生活</p>
    <br>
    <nav class="nav">
        <ul class="list-bare">
                <li><a class="nav__link" href="https://www.ddkiss.com/category/chang-yong-ji-qiao.html">常用技巧</a></li>
                <li><a class="nav__link" href="https://www.ddkiss.com/category/kai-fa-huan-jing.html">开发环境</a></li>
                <li><a class="nav__link" href="https://www.ddkiss.com/category/sheng-huo-dian-di.html">生活点滴</a></li>

                <li><a class="nav__link" href="/pages/books.html">书单</a></li>
                <li><a class="nav__link" href="/pages/movies.html">影单</a></li>
                <li><a class="nav__link" href="/pages/downloads.html">下载</a></li>
                <li><a class="nav__link" href="/pages/about.html">关于我</a></li>


        </ul>
    </nav>


    <form>
      <input type="text"  id="bdcsMain"/>
    </form>

</aside>

<!-- Content -->
<article>
  <main>
    <nav>
      <a href="/">首页</a>
      <a href="/archives.html">归档</a>
      <a href="/categories.html">分类</a>
      <a href="/tags.html">标签</a>
      <a href="/pages/about.html">关于我</a>
    </nav>
  </main>
    <section id="content">
        <article>
            <h2 class="post_title post_detail"><a href="https://www.ddkiss.com/archives/31.html" rel="bookmark"
                                                  title="Permalink to [原创]正则表达式和通配符">[原创]正则表达式和通配符</a></h2>

            <div class="post_list">
                <span>作者：</span><a href="https://www.ddkiss.com/author/bu-ding-yuan.html">布丁缘</a>
                <span class="post_category">分类：<a href="https://www.ddkiss.com/category/kai-fa-huan-jing.html" rel="bookmark"
                                               title="Permalink to 开发环境">开发环境</a></span>
                <span class="post_date">  时间：2017-09-28 16:02:00</span>

            </div>
            <div class="entry-content blog-post">
                <h1>前言</h1>
<p>曾经误以为通配符就是正则表达式，后来发现两者还是有很大差异的。Linux系统下默认很多地方都使用了通配符，比如 <code>ls abc*</code>，可以查找文件名。而正则表达式使用的地方就更多了，各种环境下都有其使用的场景，主要用于字符查找和替换。一般使用正则都有上下文。比如 nginx 里必须用<code>~</code>开头，后面跟着的才认为是正则表达式；再比如Java里，可以用 <code>Pattern compile(String regex)</code>方法来生成一个正则表达式的对象。下面具体说下他们之间的差异以及常见的用法。</p>
<h1>通配符</h1>
<ul>
<li><code>[a-z]</code>或<code>[az]</code>，表示范围内的字符或多个单字符。<code>[a-z]</code>表示从<code>a</code>到<code>z</code>的所有字符，而<code>[az]</code>表示匹配字符<code>a</code>或<code>z</code>。</li>
<li><code>[!a]</code>，取反操作，不包括某个字符。</li>
<li><code>*</code>，匹配0到多个字符。若要匹配原字符，需转义<code>\*</code>。</li>
<li><code>?</code>，表示任意单个字符。若要匹配原字符，需转义<code>\?</code>。</li>
</ul>
<h1>正则表达式</h1>
<ul>
<li><code>^</code>和<code>$</code>，从什么地方开始，以什么结尾。比如<code>^ab$</code>表示以<code>a</code>开头，以<code>b</code>结尾。</li>
<li><code>[a-z]</code>或<code>[a-zA-Z]</code>或<code>[a-z][0-9]</code>。表示一定范围内的字符。<code>[0-9]</code>可以用<code>\d</code>简单表示。</li>
<li><code>[^a-z]</code>，取反操作，不包括某些字符。</li>
<li><code>.</code>，表示任意字符，若要匹配原字符，需转义<code>\.</code></li>
<li><code>{x,y}</code>，重复次数。比如<code>{0,1}</code>表示出现0~1次，也可以用<code>?</code>简单表示；<code>{1,}</code>表示至少出现１次，也可以用<code>+</code>简单表示；<code>{0,}</code>表示0次或多次，也可以用<code>*</code>简单表示。</li>
</ul>
<p>举个例子，匹配所有的小数
第一种表示：<code>^ \-{0,1} [0-9]{0,} \.{0,1} [0-9]{0,} $</code>
第二种表示：<code>^ \-? [0-9]* \.? [0-9]* $</code>
经过简化后，更容易阅读了。</p>
<p>另外，一个正则表达式会出现多个匹配结果。比如<code>a.</code>，输入<code>abax</code>，则返回<code>ab</code>和<code>ax</code>这两个字符串。</p>
<h1>比较</h1>
<ul>
<li>取反操作。通配符用<code>[!a]</code>，而正则用<code>[^a]</code></li>
<li>任意单个字符。通配符用<code>?</code>，而正则用<code>.</code></li>
<li>任意多个字符。通配符用<code>*</code>，而正则用<code>.*</code></li>
</ul>
<h1>说明</h1>
<p>转载请注明出处 www.ddkiss.com</p>
            </div>
            <div class="post_list">
              <div><span>Tags : </span>
              </div>
            </div>
        </article>
        <div id="container"></div>
        <script type="text/javascript" src="//dn-coding-net-public-file.qbox.me/Coding-Comments/v0.1.0/gitment.min.js"></script>
        <script>
            var gitment = new Gitment({
              owner: 'whusl',
              repo: 'BlogComments',
              oauth: {
                client_id: '621866266817529fba46681653017809',
                client_secret: '14188411740b12ae52159cee9b586bf85cd54125',
              },
            })
            document.getElementById('container').appendChild(gitment.render())
          </script>
    </section>
</article>

<!-- Footer -->
    <footer>
        <p> &copy;2017-2020&nbsp;<a href="http://www.miitbeian.gov.cn/" target="_blank">鄂ICP备17020200号</a>
          Blog powered by <a href="http://getpelican.com/">Pelican</a>
        </p>
    </footer>

    <!-- Analytics -->
    <script>
      var _hmt = _hmt || [];
      (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?88c55edaf311dbacac56a16316b04c8b";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
      })();
    </script>

<script type="text/javascript">(function(){document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E'));var bdcs = document.createElement('script');bdcs.type = 'text/javascript';bdcs.async = true;bdcs.src = 'http://znsv.baidu.com/customer_search/api/js?sid=14490611060029767912' + '&plate_url=' + encodeURIComponent(window.location.href) + '&t=' + Math.ceil(new Date()/3600000);var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(bdcs, s);})();</script>

</body>
</html>